package main

import "fmt"

type Player struct {
	currPos Vec2 //当前位置
	targetPos Vec2 //目标位置
	speed float32 //移动速度
}

// 移动到某个点就是设置目标位置
func (p *Player) moveTo(v Vec2)  {
	p.targetPos = v 
}

//获取当前的位置
func (p *Player) pos() Vec2 {
	return p.currPos
}

//是否到达
func (p *Player) isArrived()bool  {
	return p.currPos.distanceTo(p.targetPos) < p.speed
}

func (p *Player) update() {
	if !p.isArrived() {
		//计算出当前位置与目标位置的朝向
		dir := p.targetPos.sub(p.currPos).normalize()
		//添加速度矢量生成新的位置
		newPos := p.currPos.add(dir.scale(p.speed))
		//移动完成后，更新当前位置
		p.currPos = newPos
	}
}
//创建新玩家
func newPlayer(speed float32) *Player  {
	return &Player{
		speed:speed,
	}
}

func main() {
	//实例化玩家对象，并设速度为0.5
	p := newPlayer(0.5)
	//让玩家移动到3，1点
	p.moveTo(Vec2{3,1})
	//如果没有叨叨就一直循环
	for !p.isArrived() {
		//更新玩家位置
		p.update()
		fmt.Println(p.currPos)
	}
}
